package com.hliushi.learn.utils;

import com.hliushi.learn.config.AuditProperties;
import com.hliushi.learn.config.MicroServiceUrl;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

/**
 * 借助PostConstruct, 但这个工具类必须加上@Component注解, 不然的话, 这个PropUtil就不会注入到IOC容器中
 * 注入不到容器, 那么这个@PostContruct注解修饰的方法就不会执行
 * <p>
 * 这个@PostContruct的执行时机, 当容器实例化当前受管Bean时@PostContruct注解的方法会被自动触发
 * 然后借此来实现静态变量初始化
 *
 * @author llhuang10
 * @date 2021/7/21 21:05
 */
@Component
public class PropUtil {

    public static AuditProperties staticAuditProperties;
    private static StringRedisTemplate stringRedisTemplate;
    private static MicroServiceUrl bean;

    @Resource
    public AuditProperties auditProperties;

    /**
     * 私有构造器, 不允许该类被实例化
     */
    private PropUtil() {
    }

    public static MicroServiceUrl getMicroServiceUrl() {
        return bean;
    }

    public static StringRedisTemplate getRedisTemplate() {
        return stringRedisTemplate;
    }

    public static AuditProperties getAuditProp() {
        // auditProperties  ERROR: 无法从静态上下文中引用非静态字段'auditProperties'
        return staticAuditProperties;
    }

    /**
     *
     */
    @PostConstruct
    public void init() {
        staticAuditProperties = auditProperties;
    }
}
